package fr.afcepf.atod.projet.services.implementations;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import fr.afcepf.atod.projet.entities.Cour;
import fr.afcepf.atod.projet.entities.Personne;
import fr.afcepf.atod.projet.services.interfaces.IServicePersonne;

@Service
@Transactional
public class ServicePersonne implements IServicePersonne {

	@PersistenceContext(unitName="myPersistenceUnit")
	private EntityManager entityManager;
	@Override
	public Boolean ajouterPersonne(Personne p) {
		try{
			entityManager.persist(p);
			return true;
		}catch (Exception e){
			e.printStackTrace();
			return false;
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public Personne connection(String login, String motDePasse) {
		Query query = entityManager.createQuery(
		"select p from Personne p where p.login=? and p.password=?");
		query.setParameter(1, login);
		query.setParameter(2, motDePasse);

		List<Personne> listePersonne = query.getResultList();
		Personne result = null;
		if(listePersonne.size() >0 && !login.equals("") && !motDePasse.equals(""))
			result = listePersonne.get(0);

		return result; 
	}

	@Override
	public Boolean editerPersonne(Personne p) {
		entityManager.merge(p);
		return true;
	}

	@Override
	public Boolean supprimerPersonne(Integer id) {
		entityManager.remove(this.getPersonneById(id));
		return true;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Personne> rechercherPersonnes(Personne p) {
		Query query = entityManager.createQuery("" +
		"select p from Personne p where p.nom=? and p.prenom=?");
		query.setParameter(1, p.getNom());
		query.setParameter(2, p.getPrenom());
		return query.getResultList();
	}

	@SuppressWarnings("unchecked")
	@Override
	public Personne getPersonneById(Integer id) {
		Query query = entityManager.createQuery("" +
		"select p from Personne p where p.id=?");
		query.setParameter(1, id);
		List<Personne> listePersonne = query.getResultList();
		Personne result = null;
		if(listePersonne.size() >0)
			result = listePersonne.get(0);
		
		return result;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Cour> getCoursFromPersonne(Personne p) {
		List<Cour> result = new ArrayList<Cour>();
		Query query = entityManager.createQuery("select c from Cour c, Personne p where c.cursusBean=p.cursus and p.id=?");
		query.setParameter(1, p.getId());
		result = query.getResultList();
		return result;
	}

}
